package org.groupg.project;

import groovy.text.SimpleTemplateEngine;
import groovy.text.Template;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ComplexGroovyTemplateExample1 {
    public static void main(String[] args) throws Exception {
        // 定义模板内容（通过属性定义）
        String templateContent = """
                    <html>
                        <head>
                            <title>Groovy 模板示例</title>
                        </head>
                        <body>
                            <h1>Hello, ${name}!</h1>
                            <p>当前时间: <%= new Date() %></p>
                            <p>以下是您的数据：</p>
                            <ul>
                                <% items.each { item -> %>
                                    <li>Item ${item}</li>
                                <% } %>
                            </ul>
                            <p>总计: ${items.sum()}</p>
                            <% if (items.sum() > 10) { %>
                                <p>总计大于 10！</p>
                            <% } else { %>
                                <p>总计小于或等于 10。</p>
                            <% } %>
                        </body>
                    </html>
                """;

        // 创建模板引擎
        SimpleTemplateEngine engine = new SimpleTemplateEngine();

        // 编译模板
        Template template = engine.createTemplate(templateContent);

        // 创建数据模型
        Map<String, Object> model = new HashMap<>();
        model.put("name", "Groovy 用户");

        // 定义 items 并传递到模板中
        List<Integer> items = Arrays.asList(1, 2, 3, 4, 5);
        model.put("items", items);

        // 渲染模板
        String output = template.make(model).toString();

        // 输出结果
        System.out.println(output);

        User user = new User();
        user.setName("Alice");
        user.setAge(30);

        model.put("user", user);

        // <p>用户名: ${user.name}</p>
        //<p>年龄: ${user.age}</p>
    }
}

class User {
    String name;
    int age;
    // getters and setters

    public int getAge() {
        return age;
    }

    public String getName() {
        return name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setName(String name) {
        this.name = name;
    }
}